属性操作 DOM jQuery 中对比解析:
DOM中操作元素属性的方法:
1 直接在元素内声明:
|
|
声明之后可以对元素的属性进行操作
|
|
输出结果:cls hello undefined ( . 操作符只能操作HTML元素固有的属性,这些个”莫须有”的无法操作)
2 通过setAttribute(“属性名”,”属性值”),可以为元素设置固有属性值或者新的属性
通过 ele.property = “value”,可以为元素设置属性值
|
|
注意细节 : “ . “ 运算符 可以直接设置固有属性 比如 class title lang href src 等某些元素特有的一些属性,以及样式属性 style;
但是 “. “ 运算符不能直接设置新增的属性 ,比如 index aaa 等新增的,原来并不存在的属性,obj.index 不会报错,但是不会起作用,如果用”[ ]”运算符,obj[index] 会直接报错,[ ] 运算符不能操作不存在的属性,
总结:
1 “ . ”运算符只能 设置 元素的固有属性和 以及 获取 元素的固有属性值,不能给元素设置新增属性以及获取元素的新增属性值;
2 setAttribute(“property”,”value”),getAttribute(“property”),其中property属性名既可以是固有的属性,也可以是新增属性,可以设置元素的属性值或者获取元素的属性值。
3 jquery中操作元素属性的方法:
- prop(“property”,”value”),可以设置jquery对象的固有属性,注意仅仅是固有属性,也就是说W3C里面本来就有的属性,prop(“property”),可以获取jquery对象属性值;
- attr(“property”,”value”),可以设置jquery对象的固有属性,也就是说W3C里面本来就有的属性,也可以新增一些W3C没有规定的属性,比如index aaa 等等符合命名规则的新增属性;attr(“property”),可以获取jquery对象属性值,包括固有属性以及新增属性。
4 HTML全局属性(固有属性)
属性 | 描述 |
---|---|
accesskey | 规定激活元素的快捷键。 |
class | 规定元素的一个或多个类名(引用样式表中的类)。 |
contenteditable | 规定元素内容是否可编辑。 |
contextmenu | 规定元素的上下文菜单。上下文菜单在用户点击元素时显示。 |
data-* | 用于存储页面或应用程序的私有定制数据。 |
dir | 规定元素中内容的文本方向。 |
draggable | 规定元素是否可拖动。 |
dropzone | 规定在拖动被拖动数据时是否进行复制、移动或链接。 |
hidden | 规定元素仍未或不再相关。 |
id | 规定元素的唯一 id。 |
lang | 规定元素内容的语言。 |
spellcheck | 规定是否对元素进行拼写和语法检查。 |
style | 规定元素的行内 CSS 样式。 |
tabindex | 规定元素的 tab 键次序。 |
title | 规定有关元素的额外信息。 |
translate | 规定是否应该翻译元素内容。 |
5 HTML5 新增API dataset
5.1.1 js中 原生js方法对dataset属性的修改会直接在DOM树上表现出来; 先来看下原来的获取和设置属性的方式是否可以起作用 setAttribute getAttribute . 操作符;
|
|
既然原来的方法可以操作data* 属性,那么 dataset这个新的API还有什么作用呢?好的,如果我想获取所有的属性值,那么该怎么操作呢?这个时候,dataset的威力就显示出来了
5.1.2 dataset是HTML5新增的一个API ,里面存放了所有的使用 data-xx 格式设置的属性集合,是一个对象;我们仅仅改变script标签里面的代码,html代码不变;
|
|
dataset 接口可以直接操作由data-xx 格式设置的所有data属性,即可以获取值,也可以设置值
- data-name-first 设置的属性,获取的时候 必须以data.nameFirst
- data-nameLast 设置的属性,获取的时候 必须以 dataset.namelast
5.2.1 jQuery中 attr prop jquery中dataset属性值的操作不会在DOM树上表现出来;
|
|
5.2.2 jquery中 data(“key”)获取属性值 data(“key”,”value”)设置属性值;
|
|
jquery中data(“key”,”value” )方法可以获取元素的属性值,也可以设置元素的属性值
- data-name-first 设置的属性,获取的时候 必须以data(“nameFirst”)
- data-nameLast 设置的属性,获取的时候 必须以 dataset(“namelast”)
- 这点和原生js是一致的。
- 这个新的属性很方便我们在元素上存取数据而不用进行Ajax请求
5.3.1根据以上总结,我们在给data-xxx 属性命名的时候,尽量不应该包含大写字母,以方便查询
5.3.2 data-xx 属性里面可以存储的页面应用或者应用程序的私有的自定义的数据,不进行Ajax请求调用服务器端的数据查询,增加性能;
睡觉!